home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / syslinux / com32 / include / sys / cpu.h next >
C/C++ Source or Header  |  2005-10-29  |  1KB  |  79 lines

  1. #ifndef _CPU_H
  2. #define _CPU_H
  3.  
  4. #include <inttypes.h>
  5.  
  6. static inline uint64_t rdtsc(void)
  7. {
  8.   uint64_t v;
  9.   asm volatile("rdtsc" : "=A" (v));
  10.   return v;
  11. }
  12.  
  13. static inline uint32_t rdtscl(void)
  14. {
  15.   uint32_t v;
  16.   asm volatile("rdtsc" : "=a" (v) : : "edx");
  17.   return v;
  18. }
  19.  
  20. static inline uint32_t cpuid_eax(uint32_t level)
  21. {
  22.   uint32_t v;
  23.  
  24.   asm("cpuid" : "=a" (v) : "a" (level) : "ebx", "ecx", "edx");
  25.   return v;
  26. }
  27. static inline uint32_t cpuid_ebx(uint32_t level)
  28. {
  29.   uint32_t v;
  30.  
  31.   asm("cpuid" : "=b" (v),  "+a" (level) : : "ecx", "edx");
  32.   return v;
  33. }
  34. static inline uint32_t cpuid_ecx(uint32_t level)
  35. {
  36.   uint32_t v;
  37.  
  38.   asm("cpuid" : "=c" (v), "+a" (level) : : "ebx", "edx");
  39.   return v;
  40. }
  41. static inline uint32_t cpuid_edx(uint32_t level)
  42. {
  43.   uint32_t v;
  44.  
  45.   asm("cpuid" : "=d" (v), "+a" (level) : : "ebx", "ecx");
  46.   return v;
  47. }
  48.  
  49. static inline uint64_t rdmsr(uint32_t msr)
  50. {
  51.   uint64_t v;
  52.   
  53.   asm volatile("rdmsr" : "=A" (v) : "c" (msr));
  54.   return v;
  55. }
  56. static inline void wrmsr(uint64_t v, uint32_t msr)
  57. {
  58.   asm volatile("wrmsr" : : "A" (v), "c" (msr));
  59. }
  60.  
  61. static inline void cpu_relax(void)
  62. {
  63.   asm volatile("rep ; nop");
  64. }
  65.  
  66. /* These are local cli/sti; not SMP-safe!!! */
  67.  
  68. static inline void cli(void)
  69. {
  70.   asm volatile("cli");
  71. }
  72.  
  73. static inline void sti(void)
  74. {
  75.   asm volatile("sti");
  76. }
  77.  
  78. #endif
  79.